#include "protocol.h"
#include <stdint.h>
#include "driver/uart.h"

uint8_t tx_buffer[20];

/**
 * 计算数据的异或校验值
 * @param data 数据指针
 * @param length 数据长度
 * @return 异或校验值
 */


void InitTools(void)
{
    auto &mcp_server = McpServer::GetInstance();

    // 例1：无参数，控制机器人前进
    mcp_server.AddTool("self.dog.forward", "机器人向前移动", PropertyList(),
                       [this](const PropertyList &) -> ReturnValue
                       {
                           //    tx_buffer[0] = 0xAA;
                           //    tx_buffer[1] = 0x55;
                           //    tx_buffer[2] = 0x03; // Length
                           uart_write_bytes(UART_NUM_1, (const char *)"Hello, world!", 13);
                           return true;
                       });
    // 例1：无参数，控制机器人前进
    mcp_server.AddTool("self.dog.forward", "机器人ho移动", PropertyList(),
                       [this](const PropertyList &) -> ReturnValue
                       {
                           //    tx_buffer[0] = 0xAA;
                           //    tx_buffer[1] = 0x55;
                           //    tx_buffer[2] = 0x04; // Length
                           //    tx_buffer[3] = xor_checksum(tx_buffer, 4);
                           uart_write_bytes(UART_NUM_1, (const char *)"Hello, world!", 13);
                           return true;
                       });
    // 例2：带参数，设置灯光 RGB 颜色
    mcp_server.AddTool("self.light.set_rgb", "set RGB颜色",
                       PropertyList({Property("r", kPropertyTypeInteger, 0, 255), Property("g", kPropertyTypeInteger, 0, 255), Property("b", kPropertyTypeInteger, 0, 255)}), [this](const PropertyList &properties) -> ReturnValue
                       {
                            int r = properties["r"].value<int>();
                            int g = properties["g"].value<int>();
                            int b = properties["b"].value<int>();
                            uart_write_bytes(UART_NUM_1, (const char *)"Hello, world!", 13);
                            return true; });
}